package com.scott.ch090;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @author 黄后林
 * @version 1.0
 * @note 模拟年终奖的工具类
 * @date 2021-12-18 16:14:18
 */
public class PrizeUtil<T> {

    // 用来产生随机数
    private Random random = new Random();

    // 可以是任何奖品
    private T prize;

    // 所有的奖品都放在这个list中
    private List<T> prizeList= new ArrayList<>();

    // 添加奖品
    public void  addPrize( T prize){
        prizeList.add(prize);
    }

    // 模拟抽奖的动作=获取奖品= 这个方法不是泛型方法哦
    public /*static*/ T getPrize(){
        // 避免数据下表越界
        int length = prizeList.size();
        T prize = prizeList.get(random.nextInt(length));
        return prize;
    }

    // 这个才是泛型方法  2个E必须一致 泛型标识 具体类型有调用方法的时候来制定
    public <E> E getPrize2(List<E> list){
        int length =list.size();
        int index =random.nextInt(length);
        E prize = list.get(index);
        return prize;
    }

    // 静态的泛型方法
    public static <E> E getPrize3(List<E> list){
        int length =list.size();
        E prize = list.get(new Random().nextInt(length));
        return prize;

    }

    public <T> void getData(T... ts){
        for(T t: ts ){
            System.out.println(t);
        }
    }

    public static <E,F,G> E getPrize4(List<E> list,F f,G g){

        System.out.println(f);
        System.out.println(g);
        int length =list.size();
        E prize = list.get(new Random().nextInt(length));
        return prize;

    }
}
